home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / communic / pcmail / daemon / percentm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-05  |  1.8 KB  |  84 lines

  1. /*++
  2.  
  3. /* NAME
  4.  
  5. /*    percentm 3
  6.  
  7. /* SUMMARY
  8.  
  9. /*    convert %m to system error message
  10.  
  11. /* PROJECT
  12.  
  13. /*    pc-mail
  14.  
  15. /* PACKAGE
  16.  
  17. /*    nfs
  18.  
  19. /* SYNOPSIS
  20.  
  21. /*    #include percentm.h
  22.  
  23. /*
  24.  
  25. /*    char *percentm(string, err)
  26.  
  27. /*    char *string;
  28.  
  29. /*    int err;
  30.  
  31. /* DESCRIPTION
  32.  
  33. /*    percentm() interprets %m format specificiers in \fIstring\fR
  34.  
  35. /*    In the output, %m will be replaced by the error message that
  36.  
  37. /*    corresponds with the error value \fIerr\fR (see <errno.h>.
  38.  
  39. /* BUGS
  40.  
  41. /*    The result is stored in static memory that is overwritten with
  42.  
  43. /*    each call.
  44.  
  45. /* AUTHOR(S)
  46.  
  47. /*    Wietse Z. Venema
  48.  
  49. /*    Eindhoven University of Technology
  50.  
  51. /*    Department of Mathematics and Computer Science
  52.  
  53. /*    Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  54.  
  55. /* CREATION DATE
  56.  
  57. /*    Sun Oct 29 15:29:37 MET 1989
  58.  
  59. /* LAST MODIFICATION
  60.  
  61. /*    12/5/89 22:03:27
  62.  
  63. /* VERSION/RELEASE
  64.  
  65. /*    1.2
  66.  
  67. /*--*/
  68.  
  69.  
  70.  
  71. #ifndef lint
  72.  
  73. static char sccsid[] = "@(#) percentm.c 1.2 12/5/89 22:03:27";
  74.  
  75.  
  76.  
  77. #endif
  78.  
  79.  
  80.  
  81. #include <stdio.h>
  82.  
  83. #include "percentm.h"
  84.  
  85.  
  86.  
  87. extern int errno;
  88.  
  89. extern char *sys_errlist[];
  90.  
  91. extern int sys_nerr;
  92.  
  93. extern char *strcpy();
  94.  
  95.  
  96.  
  97. /* percentm - replace %m by error message associated with value in err */
  98.  
  99.  
  100.  
  101. char   *percentm(str, err)
  102.  
  103. char   *str;
  104.  
  105. int     err;
  106.  
  107. {
  108.  
  109.     static char buf[BUFSIZ];
  110.  
  111.     register char *ip = str;
  112.  
  113.     register char *op = buf;
  114.  
  115.  
  116.  
  117.     while (*ip) {
  118.  
  119.     switch (*ip) {
  120.  
  121.     case '%':
  122.  
  123.         switch (ip[1]) {
  124.  
  125.         case '\0':                /* don't fall off end */
  126.  
  127.         *op++ = *ip++;
  128.  
  129.         break;
  130.  
  131.         case 'm':                /* replace %m */
  132.  
  133.         (void) strcpy(op,
  134.  
  135.             sys_errlist[(err < sys_nerr && err > 0) ? err : 0]);
  136.  
  137.         op += strlen(op);
  138.  
  139.         ip += 2;
  140.  
  141.         break;
  142.  
  143.         default:                /* leave %<any> alone */
  144.  
  145.         *op++ = *ip++, *op++ = *ip++;
  146.  
  147.         break;
  148.  
  149.         }
  150.  
  151.     default:
  152.  
  153.         *op++ = *ip++;
  154.  
  155.     }
  156.  
  157.     }
  158.  
  159.     *op = '\0';
  160.  
  161.     return (buf);
  162.  
  163. }
  164.  
  165.  
  166.  
  167.